/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.uch.biblioteca.managedBeans;

import java.io.IOException;
import java.sql.SQLException;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import net.uch.util.CommonDAO;
import java.util.List;
import net.uch.TablaSistema.managedBeans.mbMenu;
import net.uch.biblioteca.hibernateSpringDao.HSBibUsuarioDAO;
import net.uch.biblioteca.mapping.BibUsuario;
import net.uch.biblioteca.mapping.TbRoles;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import javax.faces.component.UIParameter;
import java.util.Enumeration;

public class mbUsuario {

    private String oncomplete;
    private String sUsu_descripcion;
    private int iUsu_id;
    private String sUsu_paterno;
    private String sUsu_materno;
    private String sUsu_nombre;
    private String sUsu_dni;
    private String sUsu_usuario = "";
    private String sUsu_password;
    private int iUsu_rol_id = 0;
    private String sUsu_estado = "1";
    private String edit_disable;
    private SelectItem[] cboRol;
    private SelectItem[] cboEstado;
    private mbMenu menu;
    private List<mbUsuario> usuarios = new ArrayList<mbUsuario>();
    private boolean ver;
    private boolean editar;
    private String message;

    //CONSTRUCTORES
    public mbUsuario () {
    }

    public mbUsuario ( int a ) {
    }

    //SETTER Y GETTER
    public String getsUsu_descripcion () {
        return sUsu_descripcion;
    }

    public void setsUsu_descripcion ( String sUsu_descripcion ) {
        this.sUsu_descripcion = sUsu_descripcion;
    }

    public String getMessage () {
        return message;
    }

    public void setMessage ( String message ) {
        this.message = message;
    }

    public List<mbUsuario> getUsuarios () {
        return usuarios;
    }

    public void setUsuarios ( List<mbUsuario> usuarios ) {
        this.usuarios = usuarios;
    }

    public boolean isEditar () {
        return editar;
    }

    public void setEditar ( boolean editar ) {
        this.editar = editar;
    }

    public boolean isVer () {
        return ver;
    }

    public void setVer ( boolean ver ) {
        this.ver = ver;
    }

    public mbMenu getMenu () {
        return menu;
    }

    public void setMenu ( mbMenu menu ) {
        this.menu = menu;
    }

    public String getsUsu_estado () {
        return sUsu_estado;
    }

    public void setsUsu_estado ( String sUsu_estado ) {
        this.sUsu_estado = sUsu_estado;
    }

    public SelectItem[] getCboEstado () {

        cboEstado = new SelectItem[ 2 ];
        cboEstado[0] = new SelectItem( "0", "INACTIVO" );
        cboEstado[1] = new SelectItem( "1", "ACTIVO" );

        return cboEstado;
    }

    public void setCboEstado ( SelectItem[] cboEstado ) {
        this.cboEstado = cboEstado;
    }

    public String getsUsu_dni () {
        return sUsu_dni;
    }

    public void setsUsu_dni ( String sUsu_dni ) {
        this.sUsu_dni = sUsu_dni;
    }

    public int getiUsu_id () {
        return iUsu_id;
    }

    public void setiUsu_id ( int iUsu_id ) {
        this.iUsu_id = iUsu_id;
    }

    public int getiUsu_rol_id () {
        return iUsu_rol_id;
    }

    public void setiUsu_rol_id ( int iUsu_rol_id ) {
        this.iUsu_rol_id = iUsu_rol_id;
    }

    public String getsUsu_materno () {
        return sUsu_materno;
    }

    public void setsUsu_materno ( String sUsu_materno ) {
        this.sUsu_materno = sUsu_materno;
    }

    public String getsUsu_nombre () {
        return sUsu_nombre;
    }

    public void setsUsu_nombre ( String sUsu_nombre ) {
        this.sUsu_nombre = sUsu_nombre;
    }

    public String getsUsu_password () {
        return sUsu_password;
    }

    public void setsUsu_password ( String sUsu_password ) {
        this.sUsu_password = sUsu_password;
    }

    public String getsUsu_paterno () {
        return sUsu_paterno;
    }

    public void setsUsu_paterno ( String sUsu_paterno ) {
        this.sUsu_paterno = sUsu_paterno;
    }

    public String getsUsu_usuario () {
        return sUsu_usuario;
    }

    public void setsUsu_usuario ( String sUsu_usurio ) {
        this.sUsu_usuario = sUsu_usurio;
    }

    public SelectItem[] getCboRol () {
        try {

            List lstRoles = CommonDAO.getTbRolesDAO().seleccionarRol();
            if ( lstRoles.size() > 0 ) {
                cboRol = new SelectItem[ lstRoles.size() + 1 ];
                cboRol[0] = new SelectItem( 0, "[Seleccione]" );
                for ( int i = 0; i < lstRoles.size(); i++ ) {
                    cboRol[i + 1] = new SelectItem( ((TbRoles) lstRoles.get( i )).getRolId(), ((TbRoles) lstRoles.get( i )).getRolTipo() );
                }
            } else {
                cboRol = new SelectItem[ 1 ];
                cboRol[0] = new SelectItem( 0, "[Seleccione]" );
            }
        } catch ( Exception e ) {
            e.printStackTrace();
        }
        return cboRol;
    }

    public void setCboRol ( SelectItem[] cboRol ) {
        this.cboRol = cboRol;
    }

    public String getEdit_disable () {
        return edit_disable;
    }

    public void setEdit_disable ( String edit_disable ) {
        this.edit_disable = edit_disable;
    }

    public String getOncomplete () {
        return oncomplete;
    }

    public void setOncomplete ( String oncomplete ) {
        this.oncomplete = oncomplete;
    }

    //METODOS
    public String verificarUsuario () throws SQLException, IOException {

        HSBibUsuarioDAO usuDao = CommonDAO.getBibUsuarioDAO();
        BibUsuario usu;
        if ( (usu = usuDao.validarUsuario( this.sUsu_usuario, this.sUsu_password )) != null ) {

            ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
            HttpSession session = (HttpSession) context.getSession( false );
            session.setAttribute( "usuario", usu );
            //this.setMenu(new mbMenu(usu.getTbRoles().getRolId(), usu.getUsuLogin()));
            return "ok";
        } else {
            return "error";
        }
    }

    public String seleccionarUsuario () throws Exception {
        HSBibUsuarioDAO daoUsu = CommonDAO.getBibUsuarioDAO();
        List lstUsuarios = daoUsu.seleccionarUsuario( this.sUsu_descripcion.trim() );
        this.usuarios = new ArrayList<mbUsuario>();
        for ( int i = 0; i < lstUsuarios.size(); i++ ) {
            mbUsuario usuario = new mbUsuario( 0 );

            usuario.setiUsu_id( ((BibUsuario) lstUsuarios.get( i )).getUsuId() );
            usuario.setsUsu_paterno( ((BibUsuario) lstUsuarios.get( i )).getUsuPaterno() );
            usuario.setsUsu_materno( ((BibUsuario) lstUsuarios.get( i )).getUsuMaterno() );
            usuario.setsUsu_nombre( ((BibUsuario) lstUsuarios.get( i )).getUsuNombre() );
            usuario.setsUsu_dni( ((BibUsuario) lstUsuarios.get( i )).getUsuDni() );
            usuario.setsUsu_usuario( ((BibUsuario) lstUsuarios.get( i )).getUsuLogin() );
            usuario.setsUsu_password( ((BibUsuario) lstUsuarios.get( i )).getUsuPsw() );
            usuario.setiUsu_rol_id( ((BibUsuario) lstUsuarios.get( i )).getTbRoles().getRolId() );
            usuario.setsUsu_estado( ((BibUsuario) lstUsuarios.get( i )).getUsuActivo().toString() );

            //usuario.setVer( true );
            //usuario.setEditar( false );
            usuarios.add( usuario );

        }
        return "";
    }

    public void nuevoUsuario ( ActionEvent event ) throws Exception {
        this.setiUsu_id( 0 );
        this.setsUsu_paterno( "" );
        this.setsUsu_materno( "" );
        this.setsUsu_nombre( "" );
        this.setsUsu_dni( "" );
        this.setiUsu_rol_id( 0 ); // id combo de rol de usuario
        this.setsUsu_usuario( "" );
        this.setsUsu_password( "" );
        this.setOncomplete( "" );
        this.setEdit_disable( "false" );
        this.setOncomplete( "Richfaces.showModalPanel('mpUsuario')" );
    }

    public void guardarUsuario ( ActionEvent event ) throws Exception {
        this.setOncomplete( "" );

        HSBibUsuarioDAO daoUsu = CommonDAO.getBibUsuarioDAO();
        if ( this.getsUsu_paterno().trim().length() > 0 && this.getsUsu_materno().trim().length() > 0
                && this.getsUsu_nombre().trim().length() > 0 && this.getsUsu_dni().trim().length() > 0
                && this.getsUsu_usuario().trim().length() > 0 && this.getsUsu_password().trim().length() > 0
                && this.getiUsu_rol_id() != 0 ) {

            if ( this.getiUsu_id() > 0 ) { // ACTUALIZAR USUARIO

                BibUsuario usu = new BibUsuario();

                usu.setUsuId( this.getiUsu_id() );
                usu.setUsuPaterno( this.getsUsu_paterno() );
                usu.setUsuMaterno( this.getsUsu_materno() );
                usu.setUsuNombre( this.getsUsu_nombre() );
                usu.setUsuDni( this.getsUsu_dni() );
                usu.setUsuLogin( this.getsUsu_usuario() );
                usu.setUsuPsw( this.getsUsu_password() );
                usu.setUsuActivo( this.sUsu_estado.charAt( 0 ) );
                usu.setTbRoles( new TbRoles( this.getiUsu_rol_id() ) );

                daoUsu.actualizarUsuario( usu );
                this.setOncomplete( "javascript:alert('Actualizacion Satisfactorio.');Richfaces.hideModalPanel('mpUsuario')" );
            } else { // NUEVO USUARIO

                BibUsuario usu = new BibUsuario();

                usu.setUsuId( this.getiUsu_id() );
                usu.setUsuPaterno( this.getsUsu_paterno() );
                usu.setUsuMaterno( this.getsUsu_materno() );
                usu.setUsuNombre( this.getsUsu_nombre() );
                usu.setUsuDni( this.getsUsu_dni() );
                usu.setUsuLogin( this.getsUsu_usuario() );
                usu.setUsuPsw( this.getsUsu_password() );
                usu.setUsuActivo( this.sUsu_estado.charAt( 0 ) );
                usu.setTbRoles( new TbRoles( this.getiUsu_rol_id() ) );

                daoUsu.guardarUsuario( usu );
                this.setOncomplete( "javascript:alert('Registro Satisfactorio.');Richfaces.hideModalPanel('mpUsuario')" );
            }
        } else {
            this.setOncomplete( "javascript:alert('Debe ingresar todos los Datos.')" );
        }
    }

    public void eliminarUsuario ( ActionEvent event ) throws Exception {
        
        this.setOncomplete( "" );
        HSBibUsuarioDAO daoUsu = CommonDAO.getBibUsuarioDAO();
        this.setOncomplete( "javascript:alert('El Usuario se elimino correctamente')" );
        daoUsu.eliminarUsuario( this.getiUsu_id() );


    }

    public void actualizarUsuario ( ActionEvent event ) throws Exception {

        this.setOncomplete( "" );
        HSBibUsuarioDAO daoUsu = CommonDAO.getBibUsuarioDAO();
        int id_update = Integer.parseInt( ((UIParameter) event.getComponent().findComponent( "id_update" )).getValue().toString() );

        BibUsuario usu = daoUsu.buscarUsuario( id_update );
        this.setEdit_disable( "true" );
        this.setiUsu_id( usu.getUsuId() );
        this.setsUsu_paterno( usu.getUsuPaterno() );
        this.setsUsu_materno( usu.getUsuMaterno() );
        this.setsUsu_nombre( usu.getUsuNombre() );
        this.setsUsu_dni( usu.getUsuDni() );
        this.setsUsu_usuario( usu.getUsuLogin() );
        this.setsUsu_password( usu.getUsuPsw() );
        this.setiUsu_rol_id( usu.getTbRoles().getRolId() );
        this.setsUsu_estado( usu.getUsuActivo().toString() );

        this.setOncomplete( "Richfaces.showModalPanel('mpUsuario')" );

    }

    public void verificarEliminacion ( ActionEvent event ) {
        
        int id_delete = Integer.parseInt( ((UIParameter) event.getComponent().findComponent( "id_delete" )).getValue().toString() );
        this.setiUsu_id( id_delete );
        this.setOncomplete( "javascript:Richfaces.showModalPanel('mpEliminar');" );

    }

}
